阿里云RTC的基本功能包含初始化SDK、加入频道、本地发布、订阅远端和离开频道等。通过阅读本文,您可以了解阿里云RTC的基本功能。

前提条件

  • 您已下载并集成最新版本的SDK。具体操作,请参见iOS端集成SDK

  • 您已获取加入频道必需的频道鉴权令牌(Token)。具体操作,请参见使用Token鉴权

操作步骤

说明 本文中的实现方法仅供参考,您可以根据实际业务需求进行开发。
  1. 初始化SDK。

    您需要创建DingRtcEngine实例,并注册回调。如果您在ViewController中持有DingRtcEngine实例,请声明属性。具体回调接口请参见回调及监听

    @interface ViewController () <DingRtcEngineDelegate>
    @property (nonatomic, strong) DingRtcEngine *engine;
    @end
    self.engine = [DingRtcEngine sharedInstance:self extras:@""]; 
    1. 本地预览。在创建完DingRtcEngine实例后,您可以创建canvas布局进行本地预览视频。

      DingRtcVideoCanvas *canvas = [[DingRtcVideoCanvas alloc] init];
      canvas.renderMode = DingRtcRenderModeAuto;
      canvas.view = view; /* 预览窗口view,iOS为UIView对象,Mac为NSView对象*/
      canvas.mirrorMode = DingRtcRenderMirrorModeOnlyFrontCameraPreviewEnabled;
      [self.engine setLocalViewConfig:canvas forTrack:DingRtcVideoTrackCamera];
      [self.engine startPreview];  
      说明
      • DingRtcRenderMode提供四种渲染模式:

        • DingRtcRenderModeAuto(推荐):自动。

        • DingRtcRenderModeStretch:拉伸填充视图,不保持视频比例。

        • DingRtcRenderModeFill:在保持视频宽高比的同时缩放,填充黑边。

        • DingRtcRenderModeCrop:在保持视频宽高比的同时缩放,并裁剪以适合视图。

      • DingRtcRenderMirrorMode在本地或远端均可设置镜像模式,并提供三种镜像模式:

        • DingRtcRenderMirrorModeOnlyFrontCameraPreviewEnabled:只有前置摄像头预览镜像,其余不镜像。

        • DingRtcRenderMirrorModeAllEnabled:全部镜像。

        • DingRtcRenderMirrorModeAllDisabled:全部不镜像。

    2. 可选:取消本地预览。

      [self.engine stopPreview];  
    3. 设置发布与订阅。

      • SDK默认入会后不会自动发布音频流与视频流,如果您希望自动发布音频和视频,可以在入会前通过以下接口设置:

        [self.engine publishLocalAudioStream:YES];//默认发布音频流
        [self.engine publishLocalVideoStream:YES];//默认发布视频流
      • SDK默认入会后自动订阅远端的音频流与视频流,如果您不希望自动订阅音频与视频,可以在入会前通过以下接口设置:

        [self.engine subscribeAllRemoteAudioStreams:NO];//不订阅音频流
        [self.engine subscribeAllRemoteVideoStreams:NO];//不订阅视频流
  2. 加入频道。

    DingRtcAuthInfo *authinfo = [[DingRtcAuthInfo alloc]init];
    authinfo.channelId   	= /* 您的channelId */;
    authinfo.appId     		= /* 您的Appid */;
    authinfo.userId   		= /* 您的userId */;
    authinfo.token     		= /* 您的token */;
    authinfo.gslbServer  	= /* 您的gslb地址 */;
    [self.engine joinChannel:authinfo name:@"userName" onResult:^(NSInteger errCode,NSString * _Nonnull channel,NSInteger elapsed){
         // 加入频道UI处理
    }];

    参数

    描述

    appId

    应用ID,在控制台应用管理页面创建和查看。

    channelId

    频道ID。1~64位,由大小写字母、数字、下划线(_)、短划线(-)组成。

    userId

    用户ID。1~64位,由大小写字母、数字、下划线(_)、短划线(-)组成。

    说明

    同一个用户ID在其他端登录,先入会的端会被后入会的端踢出频道。

    token

    频道鉴权令牌。

    gslbServer

    服务地址,可为空,默认值为:"https://gslb.dingrtc.com",请您通过业务服务器下发到客户端SDK,不建议您将该地址固化在客户端代码。

  3. 发布或取消发布本地流。

    • 发布本地音频流和视频流

      如果您在入会前没有设置发布音频流和视频流,则入会后不会自动发布本地的音频流和视频流,需要调用以下接口进行手动发布:

      [self.engine publishLocalAudioStream:YES];//发布音频流
      [self.engine publishLocalVideoStream:YES];//发布视频流
    • 取消发布本地音频流和视频流

      如果您需要取消发布本地的音频流和视频流,请调用以下接口:

      [self.engine publishLocalAudioStream:NO];//取消发布音频流
      [self.engine publishLocalVideoStream:NO];//取消发布视频流
  4. 订阅或取消订阅远程流。

    • 订阅远端音频流和视频流

      如果您在入会前没有设置订阅音频流和视频流,则入会后会自动订阅远端的音频流和视频流;如果您在入会前设置取消订阅音频流和视频流,则入会后需要调用以下接口进行手动订阅:

      [self.engine subscribeAllRemoteAudioStreams:YES];//订阅全部的远端音频流
      [self.engine subscribeAllRemoteVideoStreams:YES];//订阅全部的远端视频流

      订阅成功后,您可以在onRemoteTrackAvailableNotify回调里渲染远端的视频画面:

      - (void)onRemoteTrackAvailableNotify:(NSString *_Nonnull)uid audioTrack:(DingRtcAudioTrack)audioTrack videoTrack:(DingRtcVideoTrack)videoTrack {
          dispatch_async(dispatch_get_main_queue(), ^{
              // UI或者逻辑处理,例如渲染远端视频流的操作如下。
              if(videoTrack == DingRtcVideoTrackCamera) {
              // camera track
              DingRtcVideoCanvas *canvas = [[DingRtcVideoCanvas alloc] init];
              canvas.renderMode = /* renderMode */;
              canvas.view = view;/* 渲染view */
              [self.engine setRemoteViewConfig:canvas uid:uid forTrack:DingRtcVideoTrackCamera];
            }
          });
      }  
    • 取消订阅远端音频流和视频流

      如果您需要取消订阅远端的音频流和视频流,请调用以下接口:

      [self.engine subscribeAllRemoteAudioStreams:NO];//取消订阅全部的远端音频流
      [self.engine subscribeAllRemoteVideoStreams:NO];//取消订阅全部的远端视频流
    • 订阅特定用户的音频流和视频流

      当已取消订阅所有的音频流和视频流之后,如果您需要订阅某个远端用户的音频流和视频流,可以通过调用以下接口实现(如果需要取消订阅此远端用户的音频流和视频流,参数sub传入NO即可):

      [self.engine subscribeRemoteAudioStream:uid sub:YES];//订阅特定用户的音频流
      [self.engine subscribeRemoteVideoStream:uid track:DingRtcVideoTrackCamera sub:YES];//订阅特定用户的视频流
    • 订阅不同规格相机流

      如果您需要订阅流畅规格相机流,请调用以下接口:

      [self.engine setRemoteDefaultVideoStreamType:DingRtcVideoStreamTypeLD];
      说明 此接口作用于后续入会的远端用户,对于调用此接口之前已经入会的远端用户,此接口不产生影响。
    • 取消订阅所有远端用户音频流和视频流

      如果您希望当前会议中及后续入会的用户全部取消订阅,请调用以下接口:

      [self.engine subscribeAllRemoteAudioStreams:NO];
      [self.engine subscribeAllRemoteVideoStreams:NO];
  5. 离开频道。

    [self.engine leaveChannel]; 

后续步骤

您可以下载示例代码,快速运行Demo,实现频道内和其他人进行实时音视频通话,详情请参见运行 iOS Demo